package com.gdk.ksoft.assembly.utils.system;

import android.content.Context;
import android.database.Cursor;

import com.gdk.ksoft.data.common.ConstantData;
import com.lidroid.xutils.DbUtils;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by Mrper on 2014/11/25.
 * 数据库辅助类
 */
public class SQLiteUtils {
    public static SQLiteUtils dbHelper1;
    public static SQLiteUtils dbHelper2;
    private DbUtils dbUtils;

    /**
     * 获取数据库实例
     * @param context
     * @return
     */
    public static SQLiteUtils getInstance(Context context){
//        if(dbHelper1 == null)
//            dbHelper1 = new SQLiteUtils(context,ConstantData.DB_VERSION,ConstantData.DB_NAME);
//        return dbHelper1;
        return new SQLiteUtils(context,ConstantData.DB_VERSION,ConstantData.DB_NAME);
    }

    /**
     * 获取数据库对象实例
     * @param ctx
     * @param dirName
     * @return
     */
    public static SQLiteUtils getInstance(Context ctx,String dirName){
        if(dbHelper2 == null)
            dbHelper2 = new SQLiteUtils(ctx,dirName, ConstantData.DB_NAME);
        return dbHelper2;
    }

    /**
     * 构造函数
     * @param ctx
     * @param dirName
     * @param dbName
     */
    public SQLiteUtils(Context ctx, String dirName, String dbName){
        dbUtils = DbUtils.create(ctx, dirName, dbName);
//        dbUtils.configAllowTransaction(true);
    }

    /**
     * 构造函数
     * @param ctx
     * @param dbName
     */
    public SQLiteUtils(Context ctx, int dbVersion,String dbName){
        dbUtils = DbUtils.create(ctx,dbName,dbVersion,new DbUtils.DbUpgradeListener() {
            @Override
            public void onUpgrade(DbUtils dbUtils, int i, int i2) {
                try {
//VERSION = 6.0 时修改的
                    dbUtils.execNonQuery("ALTER TABLE yewuyuan ADD COLUMN xdkcqx INT;");//添加当库存不足时是否允许添加商品的字段
                    dbUtils.execNonQuery("ALTER TABLE yewuyuan ADD COLUMN cxddts INT;");//添加销售单可查询天数字段
                    dbUtils.execNonQuery("ALTER TABLE yewuyuan ADD COLUMN sjbcts INT;");//添加数据保存天数字段
//VERSION = 5.0 时修改的
                    dbUtils.execNonQuery("ALTER TABLE gouwuche_sp ADD COLUMN cx_bz TEXT;");//添加商品促销标识（标识该商品属于同一个促销活动）
                    dbUtils.execNonQuery("ALTER TABLE gouwuche_sp ADD COLUMN gmts INT;");//添加组合购买套数字段
                    dbUtils.execNonQuery("ALTER TABLE gouwuche_sp ADD COLUMN xx_id INT;");//添加组合小项促销ID字段
                    dbUtils.execNonQuery("ALTER TABLE gouwuche_sp ADD COLUMN bpsp_id INT;");//添加促销ID促销字段
                    dbUtils.execNonQuery("ALTER TABLE gouwuche_sp ADD COLUMN mztp_id INT;");//添加买赠它品促销ID字段
                    dbUtils.execNonQuery("ALTER TABLE gouwuche_sp ADD COLUMN mzbp_id INT;");//添加买赠本品促销ID字段
                    dbUtils.execNonQuery("ALTER TABLE gouwuche_sp ADD COLUMN zj_id INT;");//添加直降ID促销字段
                    dbUtils.execNonQuery("ALTER TABLE gouwuche_sp ADD COLUMN zh_id INT;");//添加组合ID促销字段
//VERSION = 4.0 时修改的
                    dbUtils.execNonQuery("ALTER TABLE yewuyuan ADD COLUMN khcz INT;");//添加客户操作权限字段
                    dbUtils.execNonQuery("ALTER TABLE yewuyuan ADD COLUMN kcts INT;");//添加库存提示字段
                    dbUtils.execNonQuery("ALTER TABLE kehu ADD COLUMN state INT;");//添加客户状态字段
//VERSION = 3.0 时修改的
                    dbUtils.execNonQuery("ALTER TABLE shangpin ADD COLUMN pp_id INT;");//添加商家商品品牌ID字段
//VERSION = 2.0 时修改的
                    dbUtils.execNonQuery("ALTER TABLE shangpin ADD COLUMN kc INT;");//添加库存字段
                    dbUtils.execNonQuery("ALTER TABLE shangpin ADD COLUMN xl INT;");//添加销量字段
                    dbUtils.execNonQuery("ALTER TABLE gouwuche_sp ADD COLUMN xgbs INT;");//添加是否可以修改价格的标识
                }catch (Exception e){
                    e.getMessage();
                    System.out.println("------>修改表结构失败!原因："+e.getMessage());
                }
            }
        });
    }

    /**
     * 获取数据库操作对象
     * @return
     */
    public DbUtils getDbUtils(){
        dbUtils.configDebug(true);
        return dbUtils;
    }

    /**
     * 获取数据库中的所有表
     * @return
     * @throws Exception
     */
    public List<String> getAllTables() throws Exception {
        List<String> tablelist = null;
        Cursor cursor = dbUtils.execQuery("select tbl_name from sqlite_master where type='table';");
        while(cursor.moveToNext()){
            if(tablelist == null) tablelist = new ArrayList<>();
            tablelist.add(cursor.getString(cursor.getColumnIndex("tbl_name")));
        }
        cursor.close();
        return tablelist;
    }

    /**
     * 清空所有表数据
     * @return
     */
    public boolean clearAllTables(List<String> tables){
        boolean isClear = false;
        if(tables!=null && tables.size()>0){
            try {
//                dbUtils.dropDb();//删除数据库
                for (String item : tables) {
                    dbUtils.execNonQuery("delete from "+item+";");
//                    dbUtils.execNonQuery("update sqlite_sequence set seq = 0 where name = '" + item + "';");
                }
                isClear = true;
            }catch (Exception e){
                e.printStackTrace();
                return false;
            }
        }
        return isClear;
    }

}
